\subsection {Authentification}

\begin{flushleft}
Cette classe permet de restreindre l'accès à l'interface. Elle vérifie la validité des identifiants fournis et ouvre la session le cas échéant. A chaque appel de page, elle vérifie la validité de la session. Elle propose également quelques fonctionnalités additionnelles: modification du mot de passe, renvoi du mot de passe en cas d'oubli. 
\end{flushleft}

\subsection {Sauvegarde}

\begin{flushleft}
Cette classe est dédiée à la sauvegarde. Elle réalise une archive contenant tous les fichiers du serveur (sources .tex dans notre cas) et exporte également le contenu de la base de données.
\end{flushleft}

\subsection {Cryptage}

\begin{flushleft}
Comme son nom l'indique , la classe Crypt a pour but d'offrir des fonctionnalités de cryptage et de décryptage.\\
\medskip
Il y a deux méthodes de cryptage différentes, mais dans les deux cas, on utilise la libraire mcrypt de PHP. 
\begin{itemize}
 \item La méthode "simple" (appelée scrypt pour le cryptage et unscrypt pour le décryptage). On utilise une clé, un algorithme et un mode invariant.
 \item La deuxième méthode (appelée crypter pour le cryptage et uncrypter pour le décryptage). On choisit aléatoirement un modèle définis (groupe clé/IV/algorithme/mode), sécurisant ainsi les différemment chaque donnée. Nous avons donc une sécurité bien plus élevée. \\
\medskip
Le choix de l'une de ces deux méthodes dépendra du niveau de confidentialité des données à crypter.
\end{itemize}

\end{flushleft}

\subsection {Formulaire}

\begin{flushleft}
La construction de formulaires en HTML est très répétitive et rébarbative, il est donc intéressant de disposer d'un outil pour simplifier ce travail. La classe Forms permet de génèrer automatiquement le code des principaux contrôles(input, textarea, checkbox, radio, select). Un fichier de spécification détermine les noms des contrôles, leurs description, ainsi que les règles de validité. Un mécanisme de contrôle en javascript permet de vérifier la validé de la saisie avant la soumission et un deuxième contrôle est effectué après la soumission au niveau du serveur en suivant les mêmes règles. 
\end{flushleft}

\subsection {Gestion}

\begin{flushleft}

Très souvent, on souhaite afficher le contenu d'une table de la base de données sous la forme d'un tableau récapitulatif, pouvoir effectuer des tris…un peu à la manière d'un tableur. Tout celà est très long et ennuyeux à coder. Nous avons donc adapté un contrôle  "table widget" de la suite DHTML Suite pour qu'il remplisse ce rôle. Il dialogue en temps réel avec le serveur (AJAX) afin d'actualiser les informations affichées suivant le choix de l'utilisateur ( tri ascendant ou descendant sur une colonne, changement de page de résultat…). Ainsi, la page est beaucoup plus rapide à charger vu qu'elle ne contient au maximum qu'une vingtaine de lignes d'enregistrements, quelque soit le nombre d'enregistrements effectivement présents dans la base de données.
\end{flushleft}

\subsection {Common}

\begin{flushleft}

Ce fichier n'est pas à proprement parler une classe mais plutôt un recueil de fonctions utiles au fonctionnement du framework. On retrouve aussi une méthode "load" qui permet de chargez des librairies tout en s'assurant qu'on ne le fait qu'une seule fois ( passée la première instanciation, un retourne un pointeur vers l'instance et non une nouvelle instance). On dispose également d'une méthode "modèle" qui permet de charger une modèle depuis un contrôleur et d'une méthode "afficher" qui appelle une vue et lui fournit un objet en paramère. 

\end{flushleft}

\subsection {Sql}

\begin{flushleft}

La classe Sql se charge de l'interaction avec la BDD et surtout, elle fournit de nombreuses méthodes pour faciliter la manipulation des données et éviter au maximum de former des requêtes SQL manuellement. Ainsi, il est possible d'effectuer une requête INSERT ou UPDATE en fournissant à la méthode un simple tableau associatif des données (couples champ/valeur).\\
Pour chaque champ de la BDD, on indique les opérations que l'on souhaite effectuer avant le stockage des valeurs : cryptage, encodage en base64, ajout de slashs… Lors d'une requête d'interrogation (SELECT), la classe se charge d'effectuer la transformation inverse. L'opération est totalement prise en compte quel que soit le format de stockage dans la base (crypté ou non, encodé en base64 ou non). Elle permet aussi de créer une abstraction sur le type de base de donnée utilisée. Si l'on décide de changer de moteur de BDD ( oracle, mysql, PostGres ), il suffit de modifier les fonctions de cette classe. \\
Enfin, petite facilité de développement, on conserve l'identificateur de la dernière requête effectuée, afin de rendre optionnelle son indication aux fonctions de récupération des résultats (num\_rows,fetch\_object…). Afin d'éviter tout conflit, on fera en sorte que les noms des champs des tables de la base soient uniques au niveau de la base. Pour cela, on les préfixera avec trois lettres correspondant au nom de la table 

\end{flushleft}